package com.spancer.contentcenter.block;

import com.baidu.xchain.saas.SaasJavaManager;
import java.util.Scanner;
public class SaasJavaTest {
    public static void main(String[] args) {
        //服务调用入口，通过SaasJavaManager这个类提供的方法进行存证等操作
        SaasJavaManager s = new SaasJavaManager();
        //sdk包里面的libSaasJavaSDK.so所在的绝对值路径地址
        String libPath = "/Users/spancer/Desktop/learning/alibaba-cloud-learn/content-center/src/main/java/com/spancer/contentcenter/block/libSaasJavaSDK.so";
        s.setLibraryPath(libPath);
        //启动后，等待用户输入
        Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.println("function list(enter the number and press the Enter key to get the function return result):");
            //输入1则会去校验private.key是否存在
            System.out.println("1. check whether an address is exist");
            //输入2则会进行跨链存证，记得传入DESC，存证成功后会获取到txid,DESC里必备的字段如下：
            //（1）fileName：用户自定义的文件名，建议定义成用户系统能识别的
            //（2）fileHash：用户对存证原文做哈希运算后算出来的哈希内容，便于后续做数据比对用（存证不存原文，只存哈希值）
            //（3）hashAlg：对原文做哈希运算时所用的哈希算法，可以使用sdk本身提供的SHA256算法（MD5,SHA256等），便于后续按照约定的哈希算法做比对
            System.out.println("2. crossTransfer");
            //输入3则根据txid获取到对应存证的信息
            System.out.println("3. query tx");
            //输入4，并传入txid，则生成提交生成证书的任务；
            // 如果先前提交过，并且生成成功，则调用本api会返回证书url供用户下载
            // 注：证书服务只支持跨链存证，普通存证无法生成证书
            System.out.println("4. generate certification");
            //输入5则去获取链上本帐号的能量值余额
            System.out.println("5. getBalanceForSpecificChain");
            //输入6则根据传入的文件使用SHA256进行哈希运算，返回哈希值
            System.out.println("6. getFileHash");
            //输入7则是进行文件哈希值的比对
            // 假设先前已进行存证，并获取到了根据传入的文件，通过SHA256进行哈希运算，
            System.out.println("7. verifyEvidence");
            System.out.println("8. crossInfo");
            String name = sc.nextLine();
            //本地加密私钥文件所在的目录，会默认识别private.key
            String path = "/Users/spancer/Desktop/learning/alibaba-cloud-learn/content-center/src/main/resources/key/";
            //链名
            String bcname = "evidence_chain_cross";
            //生成账号时设置的密码，用户自定义
            String password = "920813";
            //存证链的地址 
            String host = "106.12.78.203:37101";
            //提交证书生成的请求地址
            String certUrl = "https://xuper.baidu.com/saas/api/gencert";
            //提交跨链存证crossTransfer后，获取到的txid，可以传入通过queryTx查询
            String txid = "86548a191cbd8589cbb6619a8dd5c20e54ed9ff6b9fb4201f92f164eb451b2f9";
            //需要进行哈希比对的文件路径
            String filePath = "/Users/spancer/Downloads/采购流程梳理图.png";
             
            String desc = "{\"sourceName\":\"PaddlePi-K210 快速上手操作指南\",\"author\":\"百度\",\"copyrighterType\":\"企业\",\"copyrightOwnerNameOrReferenceSource\":\"百度\",\"knowledgePoints\":\"PaddlePi|套件\",\"knowledgeUnit\":\"AI系统-语音识别实验与系统设计\",\"knowledgeArea\":\"人工智能实验\",\"appTypes\":\"学习指南\",\"hashAlg\":\"SM3\",\"fileName\":\"PaddlePi-K210 快速上手操作指南.pdf\",\"fileHash\":\"对需要存证的文件名进行按照指定方式加密后的hash值\"}";
            //DESC示例，用户可以自定义，但是必填的字段得有，并且必须是字符串类型的json 
            if(name.equals("1")) {
                String isExist = s.isAddressExist(path);
                System.out.println("IsAddressExist : " + isExist);  //输出方法
            }else if(name.equals("2")) {
                String crossTransfer = s.crossTransfer(bcname, desc, path, password, host);
                System.out.println("crossTransfer : " + crossTransfer);
            }else if(name.equals("3")) {
                String querytx = s.queryTx(bcname, host, txid, path, password);
                System.out.println("QueryTx : " + querytx);
            }else if(name.equals("4")) {
                String cert = s.genCert(certUrl, txid, path, password);
                System.out.println("generate cert : " + cert);
            }else if(name.equals("5")) {
                String balance = s.getBalanceForSpecificChain(host, bcname, path, password);
                System.out.println("getBalanceForSpecificChain : " + balance);
            }else if(name.equals("6")) {
                String fileHashJson = s.getFileHash(filePath);
                System.out.println("getFileHash : " + fileHashJson);
            }else if(name.equals("7")) {
                String verify = s.verifyEvidence(bcname, host, txid, path, password, filePath);
                System.out.println("verifyEvidence : " + verify);
            }else if(name.equals("8")){
                String crossInfo =s.crossInfo(txid,path,password);
                 System.out.println("crossInfo : " + crossInfo);
            }
        }
    }
}
